home *** CD-ROM | disk | FTP | other *** search
- /*
- * astgmo.c ATARI ST Kermit GEM interface to option handling
- */
-
- #include <osbind.h> /* TOS binding */
- #include <stdio.h> /* common I/O defs */
- #include <obdefs.h> /* common Object definitions */
- #include <gemdefs.h> /* common GEM definitions */
- #include "astinc.h" /* common KERMIT defintions */
- #include "astobj.h" /* KERMIT object definitions */
-
-
- extern FILE *fopenb(),*fopen();
-
- typedef struct opt_entry {
- int *kopt_addr;
- int kopt_save;
- int kopt_init;
- int kopt_rindex;
- int kopt_rsubindex;
- int kopt_form;
- } KOPT;
-
-
- KOPT kopts [] = {
- {&rpsiz, TRUE, MAXPACKSIZ, KERPARAM, KPRPCKL, 'd'},
- {&spsiz, TRUE, MAXPACKSIZ, KERPARAM, KPSPCKL, 'd'},
- {&spad, TRUE, 0, KERPARAM, KPPADL, 'd'},
- {&rtimint, TRUE, YOURTIME, KERPARAM, KPRTIMO, 'd'},
- {&stimint, TRUE, MYTIME, KERPARAM, KPSTIMO, 'd'},
- {&maxtry, TRUE, MAXTRY, KERPARAM, KPMAXTRY, 'd'},
- {&ibmmode, TRUE, TRUE, KERMENU, OHANDSHA, 'x'},
- {&padding, TRUE, FALSE, KERMENU, OPADDING, 0},
- {&dotimout, TRUE, TRUE, KERMENU, OTIMOUT, 0},
- {&debug, FALSE, FALSE, KERMENU, ODEBUG, 0},
- {&translog, FALSE, FALSE, KERMENU, OTRANLOG, 0},
- {&image, TRUE, FALSE, KERMENU, OBINTRAN, 0},
- {&filnamwarn, TRUE, TRUE, KERMENU, OFILWARN, 0},
- {&rpcks, TRUE, SOH, KERPARAM, KPRPCKST, 'x'},
- {&spcks, TRUE, SOH, KERPARAM, KPSPCKST, 'x'},
- {&spadc, TRUE, MYPCHAR, KERPARAM, KPSPADC, 'x'},
- {&reol, TRUE, MYEOL, KERPARAM, KPREOL, 'x'},
- {&seol, TRUE, MYEOL, KERPARAM, KPSEOL, 'x'},
- {&rquote, TRUE, MYQUOTE, KERPARAM, KPRQUOTE, 'c'},
- {&squote, TRUE, MYQUOTE, KERPARAM, KPSQUOTE, 'c'},
- {&rturnchar, TRUE, MYTURNCHAR, KERPARAM, KPRTURN, 'x'},
- {NIL}
- };
-
- /*
- * look for kermit.opt file
- * if not found do default initialization
- */
- init_params()
- {int ix;
- if (!undump_params(KER_INI))
- /* no init file file present */
- {
- for (ix=0; kopts[ix].kopt_addr != NIL; ix++)
- *(kopts[ix].kopt_addr) = kopts[ix].kopt_init;
- };
- for (ix=0; kopts[ix].kopt_addr != NIL; ix++)
- if (!kopts[ix].kopt_save)
- *(kopts[ix].kopt_addr) = kopts[ix].kopt_init;
- }
-
- /*
- * read parameters from file
- */
- int undump_params(optfilename)
- char *optfilename;
- {FILE *pf;
- int ix;
- pf = fopen(optfilename,"r");
- if (pf == NIL) return FALSE;
- for (ix = 0; kopts[ix].kopt_addr != NIL; ix++)
- if (kopts[ix].kopt_save)
- fscanf(pf,"%x",kopts[ix].kopt_addr);
- fclose(pf);
- return TRUE;
- }
-
- /*
- * save parameters on file
- */
-
- int dump_params(optfilename)
- char *optfilename;
- {FILE *pf;
- int ix;
- pf = fopen(optfilename,"w");
- if (pf == NIL) return FALSE;
- for (ix = 0; kopts[ix].kopt_addr != NIL; ix++)
- if (kopts[ix].kopt_save)
- fprintf(pf,"%x\n",*(kopts[ix].kopt_addr));
- fclose(pf);
- return TRUE;
- }
-
- /*
- * handle clicking on the option menu
- */
- do_option(option_ix)
- int option_ix;
- {char fn[80];
- OBJECT *obj_addr;
- int ix;
- switch (option_ix)
- {case OPARSAVE:
- displ_object(KRODOSAV,-1,0,MOPTION,&obj_addr);
- if (fgetfilename(kpathname,KER_INI,fn))
- if (!dump_params(fn))
- displ_alert(1,KRINIERR);
- else displ_alert(1,KRSAVDON);
- destroy_object(KRODOSAV,-1,0,MOPTION);
- break;
- case OPARGET:
- displ_object(KRODOGET,-1,0,MOPTION,&obj_addr);
- if (fgetfilename(kpathname,KER_INI,fn))
- if (!undump_params(fn))
- displ_alert(1,KRFILNEX);
- else
- displ_alert(1,KRGETDON);
- destroy_object(KRODOGET,-1,0,MOPTION);
- break;
- case OPARCHAN:
- opt_dialog();
- break;
- case ODEBUG:
- if (debug)
- {
- fclose(deb);
- displ_alert(1,KRDBCLSD);
- }
- else
- {
- displ_object(KRODODEB,-1,0,MOPTION,&obj_addr);
- if (fgetfilename(kpathname,KER_DEB,fn))
- {
- deb = fopen(fn,"w");
- if (deb == NIL)
- {
- debug = TRUE;
- displ_alert(1,KERRFOPN);
- }
- else deblevel = displ_alert(1,KRDEBDON);
- }
- else
- debug = TRUE;
- destroy_object(KRODODEB,-1,0,MOPTION);
- };
- break;
- case OTRANLOG:
- if (translog)
- {
- fclose(log);
- displ_alert(1,KRTFCLSD);
- }
- else
- {
- displ_object(KRODOTF,-1,0,MOPTION,&obj_addr);
- if (fgetfilename(kpathname,KER_LOG,fn))
- {
- log = fopen(fn,"w");
- if (log == NIL)
- {
- translog = TRUE;
- displ_alert(1,KERRFOPN);
- }
- else displ_alert(1,KRTFDON);
- }
- else
- translog = TRUE;
- destroy_object(KRODOTF,-1,0,MOPTION);
- };
- break;
- }; /* switch */
- for (ix = 0; kopts[ix].kopt_addr != NIL; ix++)
- {
- if ((kopts[ix].kopt_rindex == KERMENU) &&
- (kopts[ix].kopt_rsubindex == option_ix))
- {
- *(kopts[ix].kopt_addr) = !(*(kopts[ix].kopt_addr));
- };
- };
- check_options();
- }
-
- /*
- * set check marks in menu
- */
- check_options()
- {int ix;
- long addr;
- rsrc_gaddr(R_TREE,KERMENU,&addr);
- for (ix = 0; kopts[ix].kopt_addr != NIL; ix++)
- if (kopts[ix].kopt_rindex == KERMENU)
- menu_icheck(addr,kopts[ix].kopt_rsubindex,
- *(kopts[ix].kopt_addr));
- };
-
- /*
- * set option values individually
- */
- opt_dialog()
- {char *valsp;
- int ix, val, minoix, res;
- OBJECT *opp;
-
- rsrc_gaddr(R_TREE,KERPARAM,&opp);
- /* update parameter table with values */
- for (ix = 0; kopts[ix].kopt_addr != NIL; ix++)
- if (kopts[ix].kopt_rindex == KERPARAM)
- {valsp = opp[kopts[ix].kopt_rsubindex].ob_spec->te_ptext;
- val = *(kopts[ix].kopt_addr);
- switch (kopts[ix].kopt_form)
- {case 'c': sprintf(valsp,"%c",val); break;
- case 'd': sprintf(valsp,"%2d",val); break;
- case 'x': sprintf(valsp,"%02x",val);break;
- }
- };
-
- /* search for start object */
- minoix = 32000;
- for (ix = 0; kopts[ix].kopt_addr != NIL; ix++)
- if (kopts[ix].kopt_rindex == KERPARAM)
- minoix = ((minoix < kopts[ix].kopt_rsubindex) ?
- minoix : (kopts[ix].kopt_rsubindex));
-
- /* display object and and analyze inputs */
- change_state(opp,KPEXITOK,NORMAL);
- change_state(opp,KPABORT,NORMAL);
- displ_object(KERPARAM,-1,-1,MOPTION,&opp);
- if (form_do(opp,minoix) == KPEXITOK)
- for (ix = 0; kopts[ix].kopt_addr != NIL; ix++)
- if (kopts[ix].kopt_rindex == KERPARAM)
- {valsp = opp[kopts[ix].kopt_rsubindex].ob_spec->te_ptext;
- if (*valsp != '\0')
- {switch (kopts[ix].kopt_form)
- {case 'c': val = *valsp; res = 1; break;
- case 'd': res = sscanf(valsp,"%d",&val); break;
- case 'x': res = sscanf(valsp,"%x",&val); break;
- };
- if (res > 0)
- *(kopts[ix].kopt_addr) = val;
- };
- };
- destroy_object(KERPARAM,-1,-1,MOPTION);
- }